package com.chen.mobiletwo.service;

import com.chen.mobiletwo.dao.MessageDao;
import com.chen.mobiletwo.entity.MessageEntity;
import com.chen.mobiletwo.entity.ResultEntity;
import com.chen.mobiletwo.service.util.PushMessageService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class MessageService {
    private static final Logger logger= LoggerFactory.getLogger(MessageService.class);//日志getLogger需要传入的类名
    @Value("${spring.mail.username}")//邮箱发送地址
    private String fromMail;
    @Resource
    MessageDao messageDao;
    @Resource //注入邮件服务
    PushMessageService pushMessageService;
    /**
     * 发送邮件
     * @param messageNote 发送内容
     * @param messageRec 收件人
     * @return Boolean
     */
    public boolean sendEmail(String messageNote,String messageRec){
        boolean flag=true;
        try {
            String type="邮箱推送";//发送类型
            if (messageDao.addMessage(messageRec,type,fromMail,messageNote)==0){
                flag=false;
            }
        }catch (Exception e){
            logger.error("数据库异常"+e.getMessage());
            flag=false;
        }
        return flag;
    }

    /**
     * 无条件无分页的获取信息列表
     * @return String 结果
     */
    public String getMessageList(){ //获取所有信息
       try{
           return ResultEntity.success(messageDao.getMessageList());
       }catch (Exception e){
           e.printStackTrace();
           logger.error(e.getMessage());
           return null;
       }
    }

    /**
     *  根据消息id获取消息
     * @param messageId 消息id
     * @return String
     */
    public String getMessageById(int messageId){ //根据id获取列表
        try{
            return ResultEntity.success(messageDao.getMessageById(messageId));
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 根据烈性获取消息对象
     * @param messageType 消息类型
     * @return String
     */
    public String getMessageByType(String messageType){ //根据id获取列表
        try{
            return ResultEntity.success(messageDao.getMessageByType(messageType));
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 根据收件人查询消息信息
     * @param messageRec
     * @return
     */
    public String getMessageByRec(String messageRec){ //根据id获取列表
        try{
            return ResultEntity.success(messageDao.getMessageByRec(messageRec));
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 根据id删除信息
     * @param messageId 信息id
     * @return String
     */
    public String delMessage(int messageId){ //根据id获取列表
        try{
            return ResultEntity.success(messageDao.delMessage(messageId));
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            return null;
        }
    }

    /**
     * 重新发送邮件
     * @param messageId id
     * @return String
     */
    public String rePushMail(int messageId){
        MessageEntity messageEntity=messageDao.getMessageById(messageId);//根据messageId获取到对象
        if (messageEntity.getMessageRec()==null || messageEntity.getMessageRec().equals("")){
            return ResultEntity.fail(-10005);//值为空
        }else {
            if (pushMessageService.rePushMail(messageEntity.getMessageRec(),messageEntity.getMessageNote())){//重发成功
                if (messageEntity.getMessageStatus()==1){
                    if (messageDao.upMessage(messageId)>0){//修改数据库成功
                        return ResultEntity.success(true);
                    }else {
                        return ResultEntity.success(false);
                    }
                }else {
                    return ResultEntity.success(true);
                }
            }else {
                return ResultEntity.fail(-10003);//邮件发送失败
            }

        }
    }

}
